package com.magic.smartcity.view.more.viewmodels

import android.util.Log
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import com.magic.smartcity.beans.MetroCurrentStationLines
import com.magic.smartcity.beans.MetroLine
import com.magic.smartcity.beans.MetroLines
import com.magic.smartcity.beans.MetroStep
import com.magic.smartcity.view.more.models.MetroModel

class MetroViewModel : ViewModel() {
    private val TAG: String = "MetroViewModel"

    private var metroModel = MetroModel()

    //地铁所有城市所有的路线
    val lineList = MutableLiveData<List<MetroLine>>()

    //当前站点的全部线路
    val currentStationLineList = MutableLiveData<MetroLines>()

    //当前经过站点的线路(上一站下一站)
    val currentStationLinesDetail = MutableLiveData<List<MetroCurrentStationLines>>()

    //当前线路详细情况
    val lineDetail = MutableLiveData<MetroStep>()
    /**
     * 请求获取所有线路信息
     */
    fun requstMetroLineList() {
        Log.d(TAG, "请求获取地铁全部线路")
        metroModel.getMetroAllLineList(success = {
            //排序 /*去重*/
            lineList.postValue(it.sortedBy { it.lineName }/*.distinctBy { it.lineName}*/)
        }, fail = { Log.d(TAG, "错误:::msg=${it}") })
    }

    /**
     * 获取当前站点的全部经过线路
     */
    fun getLinesByStationName(stationName: String) {
        Log.d(TAG, "请求获取当前站点(${stationName})的全部线路")
        metroModel.getLinesByStationName(stationName, success = {
            currentStationLineList.postValue(it)
        }, fail = { Log.d(TAG, "错误:::msg=${it}") })
    }

    /**
     * 线路详情,距离当前站点剩余几个站，现在在什么地方，时间距离等
     */
    fun getStepDetailByLineId(lineId: String) {
        Log.d(TAG, "请求获取当前线路(${lineId})运行详情情况")
        metroModel.getStepDetailByLineId(lineId, success = {
            lineDetail.postValue(it)
        }, fail = {})
    }

    /**
     * 获取当前站点的全部经过线路
     */
    fun getCurrentStationDetail(stationName: String) {
        Log.d(TAG, "请求获取当前站点(${stationName})的全部线路,当前的详细情况，(上一站和下一站以及到站时间)")
        metroModel.getCurrentStationDetail(stationName, success = {
            currentStationLinesDetail.postValue(it.sortedBy { it.lineName })
        }, fail = {})
    }


}
